/**
 * 根据 ECMAScript 规范，这个符号作为一个属性表示“一个方法，该方法返回对象默认的迭代器。
 * 由 for-of 语句使用”。换句话说，这个符号表示实现迭代器 API 的函数。
 */
class Emitter {
  constructor(max) {
    this.max = max
    this.idx = 0
  }

  *[Symbol.iterator]() {
    while (this.idx < this.max) {
      yield this.idx++
    }
  }
}

function count() {
  let emitter = new Emitter(5)
  for (const x of emitter) {
    console.log(x)
  }
}
count()
console.log(Symbol.iterator) // Symbol(Symbol.iterator)

console.log(typeof Symbol.iterator) // symbol
